﻿// ===============================================================================
//  Copyright © ymind.net. All rights reserved .
//  官方网站：http://ymind.net/
//  版权所有：彦铭工作室 老陈出品
// ===============================================================================

using System.Web;
using System.Web.UI;

namespace Lcsoft.UrlRewriter
{
	/// <summary>
	/// 将标记字符和文本写入到 ASP.NET 服务器控件输出流。此类提供保持在表单提交之后保持表单 action 属性值的功能。
	/// </summary>
	public class RewriteFormHtmlTextWriter : HtmlTextWriter
	{
		/// <summary>
		/// 初始化 <see cref="RewriteFormHtmlTextWriter"/> 类的新实例。
		/// </summary>
		/// <param name="writer"><see cref="HtmlTextWriter"/> 对象的实例。</param>
		public RewriteFormHtmlTextWriter(HtmlTextWriter writer) : base(writer) { this.InnerWriter = writer.InnerWriter; }

		/// <summary>
		/// 将指定的标记特性和值写入到输出流，并且如果指定了，还写入经过编码的值。
		/// </summary>
		/// <param name="name">要写入到输出流的标记特性。</param>
		/// <param name="value">分配给特性的值。</param>
		/// <param name="fEncode">若对特性及其赋值进行编码，则为 true；否则，为 false。</param>
		public override void WriteAttribute(string name, string value, bool fEncode)
		{
			if (name == "action")
			{
				if (HttpContext.Current.Items["ActionAlreadyWritten"] == null)
				{
					value = HttpModule.RawUrl;

					HttpContext.Current.Items["ActionAlreadyWritten"] = true;
				}
			}

			base.WriteAttribute(name, value, fEncode);
		}
	}
}
